package marketplace.web.rest;


import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Properties;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.faces.context.ExternalContext;
import javax.naming.InitialContext;
import javax.servlet.ServletContext;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import marketplace.ejb.interfaces.IContenidoDigitalEJB;
import marketplace.ejb.interfaces.IUsuarioEJB;
import marketplace.ejb.interfaces.IVentaEJB;
import marketplace.jpa.datas.DataContenidoDigital;
import marketplace.jpa.datas.DataVersion;
import marketplace.web.utils.UtilsBean;

import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;



@Path("/wsrest")
@Stateless
public class WSREST {
	
	@EJB	private IUsuarioEJB usuario;

	
	public WSREST() { super(); }

	@PostConstruct
	public void postConstruct() { //request is NOT null
	}
	
	@PreDestroy
	public void preDestroy() { //after rest method executing
	}

	
	
	//// OPERACIONES ////////////////////////////////////////////////////////////////////////////////	
	    
		
	@Path("/login")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public JSONObject ValidarLogin(JSONObject inputJsonObj){
		
		boolean ok = false;
		JSONObject dev =  new JSONObject();
		
		 try {
			 
			IUsuarioEJB isr = (IUsuarioEJB) new InitialContext().lookup("java:global/Marketplace/MarketEJB/CTRLUsuarioEJB");
			
			String email = (String) inputJsonObj.get("email");
			String pass = (String) inputJsonObj.get("pass");
			
			System.out.println("Pass: " + pass + "    mail: "+ email);
			
			
			String password;
			UtilsBean ub = new UtilsBean();
			password = ub.cryptMD5(pass);
			
			
			ok = isr.validarLogin(email, password);
			
			
			if (ok) dev.put("valor",1);
			else dev.put("valor",0);
		 } catch (Exception e) { e.printStackTrace(); }
		
		
		//return String.valueOf(ok);
		 //return inputJsonObj;
		 return dev;
	}
		
	@Path("/categorias")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public JSONObject getCategorias(){
		
		JSONObject dev =  new JSONObject();
		
		 try {
			 
			IContenidoDigitalEJB isr = (IContenidoDigitalEJB) new InitialContext().lookup("java:global/Marketplace/MarketEJB/CTRLContenidoDigitalEJB");
					
			Collection <String> categorias = (ArrayList<String>) isr.getNombresCategorias();

			dev.put("categorias", categorias);
			
		 } catch (Exception e) { e.printStackTrace(); }
		
		 return dev;
	}	
	
	@Path("/subcategorias")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public JSONObject getSubcategorias(JSONObject inputJsonObj){
		
		JSONObject dev =  new JSONObject();
		
		 try {
			 
			IContenidoDigitalEJB isr = (IContenidoDigitalEJB) new InitialContext().lookup("java:global/Marketplace/MarketEJB/CTRLContenidoDigitalEJB");
			
			Collection <String> subcategorias = (ArrayList<String>) isr.getNombresSubCategoriasPorCategoria(inputJsonObj.getString("categoria"));

			dev.put("subcategorias", subcategorias);

			
		 } catch (Exception e) { e.printStackTrace(); }
		
		 return dev;
	}
	
	@Path("/contenidos")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public JSONObject getContenidosPorFiltro(JSONObject inputJsonObj){
		
		JSONObject dev =  new JSONObject();
		
		 try {
			 
			IContenidoDigitalEJB isr = (IContenidoDigitalEJB) new InitialContext().lookup("java:global/Marketplace/MarketEJB/CTRLContenidoDigitalEJB");

			IUsuarioEJB isu = (IUsuarioEJB) new InitialContext().lookup("java:global/Marketplace/MarketEJB/CTRLUsuarioEJB");			

			IVentaEJB isv = (IVentaEJB) new InitialContext().lookup("java:global/Marketplace/MarketEJB/CTRLVentaEJB");
			
			JSONArray contenidos = new JSONArray();
			
			String tipo = inputJsonObj.getString("tipo");
			
			ArrayList<DataContenidoDigital> rec = new ArrayList<DataContenidoDigital>();
			if (tipo.equals("subcategoria")){
				rec = (ArrayList<DataContenidoDigital>) isr.getContenidoDigitalesSubcategorias(inputJsonObj.getString("subcategoria"));
			}else if (tipo.equals("wishlist")){
				rec = (ArrayList<DataContenidoDigital>) isu.getContenidoDigitalesWishlist(inputJsonObj.getString("mail"));				
			}else if (tipo.equals("buscar")){
				rec = (ArrayList<DataContenidoDigital>) isr.getContenidoDigitalesBusqueda(inputJsonObj.getString("valor"));				
			}else if (tipo.equals("toppagas")){
				rec = (ArrayList<DataContenidoDigital>) isv.getTopPagas();				
			}			
			
			for (DataContenidoDigital dc :  rec) {
				JSONObject agregar = new JSONObject();			
				
				agregar.put("idContenido", dc.getIdContenido());
				agregar.put("nombre", dc.getNombre());
				agregar.put("descripcion", dc.getDescripcion());
				
				contenidos.put(agregar);
			}
			
			dev.put("contenidos", contenidos);
			
		 } catch (Exception e) { e.printStackTrace(); }
		
		 return dev;
	}
		
	@Path("/infocontenido")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public JSONObject getInfoContenido(JSONObject inputJsonObj){
		
		JSONObject agregar = new JSONObject();

		
		 try {
			 
			IVentaEJB isr = (IVentaEJB) new InitialContext().lookup("java:global/Marketplace/MarketEJB/CTRLVentaEJB");
			IContenidoDigitalEJB icd = (IContenidoDigitalEJB) new InitialContext().lookup("java:global/Marketplace/MarketEJB/CTRLContenidoDigitalEJB");
			
			UtilsBean ub = new UtilsBean();
			
			/*Collection <DataContenidoDigital> contenidos = (ArrayList<DataContenidoDigital>) isr.getContenidoDigitalesSubcategorias(inputJsonObj.getString("subcategoria"));*/
			
			DataVersion dc = icd.obtenerDataUltimaVersionAutorizada(Integer.parseInt(inputJsonObj.getString("contenido")));
			
			agregar.put("nombreContenido", dc.getContDig().getNombre());
			agregar.put("descripcionContenido", dc.getContDig().getDescripcion());

			JSONArray imagenes = new JSONArray();
/*	    	for (int i = 0; i < 5; i++){
	    		try{

	    		    String path = System.getProperty("jboss.server.base.dir");  

	    		    String ruta = path+("/deployments/Marketplace.ear/MarketWEB.war/Imagenes");
	    		     
	    		    System.out.println("RUTA: " +ruta);
	    			
	    			
		    		if ((new File(ruta+"/"+dc.getContDig().getNombre()+i).exists())){
		    			JSONObject img = new JSONObject();
		    			img.put(dc.getContDig().getNombre()+i, ub.imagenBase64(ruta+"/"+dc.getContDig().getNombre()+i, false));
		    			imagenes.put(img);
		    		}
	    		}catch(Exception e){
	    			e.printStackTrace();
	    		}
			}
			agregar.put("imaganesVersion", imagenes);
			*/
			
			agregar.put("videoContenido", dc.getContDig().getVideo());
			agregar.put("precioVersion", String.valueOf(dc.getPrecio()));
			
			agregar.put("numeroVersion", String.valueOf(dc.getNumero()));
			agregar.put("valoracionVersion", String.valueOf(isr.obtenerValoracionTotalVersion(dc.getIdVersion()))  );
			agregar.put("cantidadDescargasVersion", String.valueOf(dc.getCantDescragas()) );
			agregar.put("tamanioVersion", dc.getTamanio().toString());
			
			agregar.put("mailProveedor", dc.getContDig().getProveedor().getMail());
			
			agregar.put("archivoVersion", dc.getArchivo());
			
			/*agregar.put("archivoVersion", "/MarketWEB/Files/"+dc.getArchivo());
			
			agregar.put("logoVersion", "/MarketWEB/Imagenes/Logos/"+dc.getContDig().getNombre());
	    	
	    	for (int i = 0; i < 5; i++){		    		
    			String clave = "img" + i;
    			agregar.put(clave, "/MarketWEB/Imagenes/"+dc.getContDig().getNombre()+i);
	    	} 				
			*/
			
			
			
		 } catch (Exception e) { System.out.println("ERROR WSREST getInfoContenido: "+e.getMessage()); }
		
		 return agregar;
	}
	
	
}

	
